struct student { char name[10]; char num [8];char a; double b[6];};

来源:百度知道 编辑:UC知道 时间:2024/05/27 05:24:24
为什么student这个类型要占用72个字节的存储空间呢,不是10+8+1+48=67吗

一、请问二楼的:#pragma pack(1)和#pragma pack() 2句话是干啥用?
不过刚才在VC中试了试,要是没有这2句话输出结果是72,加上去后是67.
正确的代码如下:
#include"stdafx.h"
#include<stdio.h>
#pragma pack(1)
struct student
{
char name[10];
char num [8];
char a;
double b[6];
}stu;
#pragma pack()
void main()
{
int s = sizeof(stu);
printf("The size of the struct is:%d\n",s);
}
#pragma pack(1) 的作用如下:
主要用来设置结构定义的字节对齐方式,比如是单字节对齐,双字节对齐等,比如如果是双字节对齐,那么结构的成员变量的地址必须是2的整数倍,这就造成了字节补齐,但是提高了访问速度。单字节呢,就是没有补齐,成员变量的地址是连续的,其他依次类推,通常是4,8等。通常用于网络传输数据,特别是传输整个结构时,必须采取单字节对齐,这样才可以直接把结构地址,以及结构长度,作为Send的参数发送整个结构,否则只能依次发送结构的成员,要不然会出现结构解释的差异。
另外,在Project->Setting->C/C++->Code Generation->Struct member alignment中可以设置结构的对齐方式。
二、另外一种情况是因为你的C/C++编译器进行了字对齐调整的缘故。
为了提高运行效率,有些编译器在默认的情况下做字对齐甚至双字对齐调整, 所有变量的存放起始地址都调整为字长的整数倍。即若字长32位,4字节,则所有变量的存放起始地址都是4的整数倍,而double类型更要起始在8的整数倍(双字对齐)。 最后祝你成功!